/**
 * 167. Two Sum II - Input array is sorted
 * https://leetcode.cn/problems/two-sum-ii-input-array-is-sorted/description/
 */
class TwoSumIIInputArrayIsSorted {
    
    /**
     * 方法： twoSum
     *
     * 逻辑: 在给定的已排序数组中找到两个数，使它们的和等于目标值，并返回它们的索引。
     *
     * Args:
     *   numbers (int[]): 输入的已排序整数数组。
     *   target (int): 目标和。
     *
     * Returns:
     *   int[]: 包含两个数的索引（1-based），如果没有找到则返回 null。
     *
     * Time:  
     *   O(N)，其中 N 是数组的长度。使用双指针遍历数组。
     *
     * Space:  
     *   O(1)，只使用常数级别的额外空间。
     */
    public int[] twoSum(int[] numbers, int target) {
        int left = 0;
        int right = numbers.length -1;
        while(left < right){
            int s = numbers[left] + numbers[right];
            if(s == target){
                return new int[]{left + 1, right + 1};
            }
            if(s > target){
                right--;
            } else {
                left++;
            }
        }
        return null;
    }
}